home *** CD-ROM | disk | FTP | other *** search
/ Delphi Informant Complete 1995 - 2000 / Delphi Informant Complete 1995 to 2000.iso / Delphi Informant Magazine Complete Works SOURCE CODE 1998.rar / 1998 / Jul / di9807jp / SFTPCLIENT / Main.pas < prev    next >
Pascal/Delphi Source File  |  1998-02-20  |  4KB  |  191 lines

  1. (*
  2.   Main unit developed for Delphi Informant article by John Penman, 23 January 1998
  3. *)
  4. unit Main;
  5.  
  6. interface
  7.  
  8. uses
  9.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  10.   StdCtrls, Buttons, ComCtrls, Winsock2, ExtCtrls, CMsgThrd;
  11.  
  12. const
  13.   MsgPort = 2589;
  14.  
  15. type
  16.   TfrmMain = class(TForm)
  17.     gbHost: TGroupBox;
  18.     gbFileName: TGroupBox;
  19.     gbUserName: TGroupBox;
  20.     edHostName: TEdit;
  21.     edFileName: TEdit;
  22.     edUserName: TEdit;
  23.     gbPortNo: TGroupBox;
  24.     edPortNo: TEdit;
  25.     gbMessages: TGroupBox;
  26.     memStatusMsg: TMemo;
  27.     gbActions: TGroupBox;
  28.     bbtnGetFile: TBitBtn;
  29.     bbtnClose: TBitBtn;
  30.     UpDown1: TUpDown;
  31.     bbtnAbout: TBitBtn;
  32.     gbPassword: TGroupBox;
  33.     edPassword: TEdit;
  34.     bbtnLoad: TBitBtn;
  35.     GroupBox1: TGroupBox;
  36.     edTimerSetting: TEdit;
  37.     UpDown2: TUpDown;
  38.     gbMachineName: TGroupBox;
  39.     edMachineName: TEdit;
  40.     procedure FormCreate(Sender: TObject);
  41.     procedure bbtnCloseClick(Sender: TObject);
  42.     procedure bbtnGetFileClick(Sender: TObject);
  43.     procedure edPortNoEnter(Sender: TObject);
  44.     procedure bbtnAboutClick(Sender: TObject);
  45.     procedure bbtnLoadClick(Sender: TObject);
  46.     procedure Timer1Timer(Sender: TObject);
  47.   private
  48.     Started : Boolean;
  49.     OldMsgPort : String;
  50.     TimeOutValue : Integer;
  51.     wsaData : TWSADATA;
  52.     thrdMsg : TMsgThrd;
  53.     function Start : Boolean;
  54.   end;
  55.  
  56. var
  57.   frmMain: TfrmMain;
  58.  
  59. implementation
  60.  
  61. uses About;
  62.  
  63. {$R *.DFM}
  64.  
  65. var
  66.   Request : TRequest;
  67.  
  68. // Check out Winsock 2.2 and load it if it's there ...
  69.  
  70. function TfrmMain.Start : Boolean;
  71. var
  72.  VerReqd : WordRec;
  73. begin
  74.  with VerReqd do
  75.  begin
  76.   Hi := 2;
  77.   Lo := 2;
  78.  end;
  79.  Result := WSAStartUp(Word(VerReqd), wsaData) = 0;
  80. end;
  81.  
  82. // Create the main form and initialize variables ...
  83.  
  84. procedure TfrmMain.FormCreate(Sender: TObject);
  85. begin
  86.  State := stDead;
  87.  memStatusMsg.Clear;
  88.  bbtnGetFile.Enabled := FALSE;
  89. end;
  90.  
  91. // Cleanup and shut up shop ...
  92.  
  93. procedure TfrmMain.bbtnCloseClick(Sender: TObject);
  94. begin
  95.  if Started then
  96.   WSACleanUp;
  97.  Close;
  98. end;
  99.  
  100. // Attempt to start up Winsock 2.2 ...
  101.  
  102. procedure TfrmMain.bbtnGetFileClick(Sender: TObject);
  103. var
  104.  Position : Integer;
  105.  WorkStr : String;
  106. begin
  107.  if length(edHostName.Text) = 0 then
  108.  begin
  109.   ShowMessage('Host name is missing!');
  110.   Exit;
  111.  end;
  112.  with Request do
  113.  begin
  114. // Check here for selected port number,
  115. // which must NOT be the same as the message port (2589)
  116.   Position := Pos(',',edPortNo.text);
  117.   WorkStr := edPortNo.text;
  118.   delete(WorkStr,Position,1);
  119.   edPortNo.Text := WorkStr;
  120.   if StrToInt(edPortNo.text) = MsgPort then
  121.   begin
  122.    ShowMessage('Cannot select the same port number as the message port!');
  123.    edPortNo.text := OldMsgPort;
  124.    edPortNo.Refresh;
  125.    Exit;
  126.   end;
  127.   Port := edPortNo.Text;
  128.   HostName := edHostName.Text;
  129.   MachineName := edMachineName.Text;
  130.   UserName := edUserName.Text;
  131.   Password := edPassword.Text;
  132.   FileName := edFileName.Text;
  133.  end; // with Request
  134.  
  135.  bbtnGetFile.Enabled := FALSE;
  136.  WorkStr := edTimerSetting.Text;
  137.  delete(WorkStr, Pos(',',WorkStr),1);
  138.  TimeOutValue := StrToInt(WorkStr);
  139. // Create the message thread to handle messages from the SFTPServer machine ...
  140.  thrdMsg := TMsgThrd.Create(Request, TimeOutValue);
  141. end;
  142.  
  143. // Store old port number ...
  144.  
  145. procedure TfrmMain.edPortNoEnter(Sender: TObject);
  146. begin
  147.  OldMsgPort := edPortNo.text;
  148. end;
  149.  
  150. // Call About ...
  151.  
  152. procedure TfrmMain.bbtnAboutClick(Sender: TObject);
  153. begin
  154.  try
  155.   frmAbout := TfrmAbout.Create(Self);
  156.   frmAbout.ShowModal;
  157.  finally
  158.   frmAbout.Free;
  159.  end;
  160. end;
  161.  
  162. procedure TfrmMain.bbtnLoadClick(Sender: TObject);
  163. var
  164.  Name : array[0..127] of char;
  165. begin
  166. // Try to load Winsock 2 DLL ...
  167.  Started := Start;
  168.  if Started then
  169.  begin
  170.   memStatusMsg.Lines.Add('Successfully started Winsock 2.0');
  171.   bbtnGetFile.Enabled := TRUE;
  172.   bbtnLoad.Enabled  := FALSE;
  173. // Get local hostname
  174.   gethostname(@Name[0], SizeOf(Name));
  175.   edMachineName.text := String(Name);
  176.  end else
  177.  begin
  178.   ShowMessage('Failed to start Winsock 2');
  179.   Exit;
  180.  end;
  181. end;
  182.  
  183. procedure TfrmMain.Timer1Timer(Sender: TObject);
  184. begin
  185.  thrdMsg.Terminate;
  186.  bbtnGetFile.Enabled := TRUE;
  187. end;
  188.  
  189. end.
  190.  
  191.